// hdu4512
// 题意：给定n(<=200)个数，你要找一个最长的回文序列，并且前一半要
//       单调递增。（如果是奇数个数，中间那个数无所谓）。
//
// 题解：很巧妙。就是将原数列倒过来求两个数列的最长公共上升子序列（前一半）。
//       用f[i][j]表示原串(a)前i个数和倒串(b)前j个数，以第j个数结尾，最长的
//       公共上升子序列。
//       转移很简单，
//         若a[i] != b[j]，f[i][j] = f[i-1][j]
//         若a[i] == b[j], f[i][j] = max(f[i-1][k]) + 1, 1<=k<j, b[j]>b[k]
//
//       第二个转移乍看是O(n)的，其实在转移过程中不断维护a[i]>b[j]且使得
//       f[i-1][j]最大的j给k。（因为最后一定有a[i]等于某个b，所以b[j]>b[k]
//       就是a[i]>b[k]）。
//
// run: $exec < input
#include <iostream>
#include <cstring>

int const maxn = 208;
int a[maxn], f[maxn];
int n;

int main()
{
	int T; std::cin >> T;
	while (T--) {
		std::cin >> n;
		std::memset(f, 0, sizeof(f));
		for (int i = 1; i <= n; i++) std::cin >> a[i];
		int ans = 0;
		for (int i = 1; i <= n; i++)
			for (int j = 1, k = 0; j <= n - i + 1; ans = std::max(ans, f[j++]))
				if (a[i] == a[n - j + 1])
					f[j] = std::max(f[j], f[k] + 1 + (i != n - j + 1));
				else if (a[i] > a[n - j + 1] && f[k] < f[j]) k = j;
		std::cout << ans << '\n';
	}
}

